package org.travel.app.service;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.travel.app.entity.IdVerification;
import org.travel.app.entity.spots.Spots;
import org.travel.app.entity.user.User;
import org.travel.app.entity.user.UserSpotsStart;

import java.util.List;

/**
 * @author nmm
 * @date 2024-12-2024/12/8
 * @deriction njm......
 */
public interface UserService {
    /**
     * 查询所有用户
     * @return
     */
     List<User> getUserList();

    /**
     * 判断用户是否注册
      * @param user
     * @return
     */
    Boolean enSureUserExit(User user);

    /**
     * 通过用户名查询用户是否存在
     * @param user
     * @param status
     * @return
     */
     Boolean enSureUserByName(User user,Boolean status);

    /**
     * 通过用户手机号查询用户是否存在
     * @param user
     * @param status
     * @return
     */
     Boolean enSureUserByPhone(User user,Boolean status);

    /**
     * 添加用户
     * @param user
     */
    void addUser(User user);


    /**
     * 添加游客个人预约信息
     * @param reservationUser
     */
    void addReservationUser(IdVerification reservationUser);


    /**
     * 查询所有游客个人信息
     * @return
     */
    List<IdVerification>  getAllReservationUser();


    /**
     * 查询是否是填写的同一个游客信息
     * @param idVerification
     */
    void enSureSomeUser(@ModelAttribute("reservationUser") IdVerification idVerification);



    /**
     * 通过用id查询用户积分
     * @param userId
     */
    Integer   getPointsByUserId(int userId);


    /**
     * 通过用户id统计订单数
     * @param userId
     */
    Integer  getUserOrderCount(int userId);


    /**
     *通过用户id统计优惠券数量
     * @param userId
     */
    Integer getUserTicketCount(int userId);


    /**
     * 统计用户收藏数量
     * @param userId
     * @return
     */
    Integer getUserStartCount(@Param("userId") int userId);



    /**
     * 用户收藏
     * @param userSpotsStart
     */
    void addUserStart(UserSpotsStart userSpotsStart);

    /**
     * 修改收藏状态
     * @param userSpotsStart
     */
    void updateUserStart(UserSpotsStart userSpotsStart);


    /**
     * 判断是否收藏指定商品
     * @param userSpotsStart
     */
    UserSpotsStart isHaveStartSpots(@Param("start") UserSpotsStart userSpotsStart);



    /**
     * 获取用户收藏景点
     * @return
     */
    List<Spots> getStartSpots(@Param("userId") int userId);
}
